home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 27 / CU Amiga Magazine's Super CD-ROM 27 (1998)(EMAP Images)(GB)[!][issue 1998-10].iso / CUCD / PowerPC / vbcc / Examples / ttt / ttt.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-05-24  |  2.3 KB  |  100 lines

  1. #include <stdio.h>
  2.  
  3. int f[3][3];
  4. int bi,bj;
  5. char buf[4];
  6.  
  7. main()
  8. {
  9.     int i,j,w,amzug,zug;
  10.     for(i=0;i<3;++i)
  11.         for(j=0;j<3;j++)
  12.             f[i][j]=0;
  13.  
  14.     printf("Darf ich anfangen (j/n)? ");
  15.     scanf("%2s",buf);
  16.     if(*buf=='j'||*buf=='J') amzug=1; else amzug=0;
  17.  
  18.     zug=0;printfield();
  19.  
  20.     while(1){
  21.         bi=bj=4;
  22.         zug++;if(zug>9){printf("Unentschieden\n");exit(0);}
  23.         if(w=win()){
  24.             if(w>0){printf("Ich habe gewonnen\n");exit(0);}
  25.              else  {printf("Sie haben gewonnen, das darf nicht sein!\n");}
  26.         }
  27.         if(amzug){
  28.             if(zug>1) w=rek(0); else {w=0;bi=bj=1;}
  29.             printf("Ich setze auf (%d,%d)\n",bi+1,bj+1);
  30.             f[bi][bj]=1;
  31.             if(w&&zug<9) printf("Und werde gewinnen\n");
  32.         }else{
  33.             while(bi<1||bi>3||bj<1||bj>3||f[bi-1][bj-1]){
  34.                 printf("Ihr Zug (x,y): ");
  35.                 scanf("%d,%d",&bj,&bi);
  36.             }
  37.             f[bi-1][bj-1]=-1;
  38.         }
  39.         printfield();
  40.         amzug=1-amzug;
  41.     }
  42. }
  43. rek(t)
  44.     int t;
  45. {
  46.     int i,j,z,bw,w,s;
  47.     z=0;
  48.     w=win(); if(w!=0) return(w);
  49.     if(t&1) s=-1; else s=1;
  50.     bw=-s;
  51.     for(i=0;i<3;i++){
  52.         for(j=0;j<3;j++){
  53.             if(f[i][j]==0){
  54.                 z=1; f[i][j]=s;
  55.                 w=rek(t+1);
  56.                 if((w>=bw&&s==1)||(w<=bw&&s==-1)){
  57.                     bw=w;
  58.                     if(t==0) {bi=i;bj=j;}
  59.                     if(bw==s) {f[i][j]=0;return(bw);}
  60.                 }
  61.                 f[i][j]=0;
  62.             }
  63.         }
  64.     }
  65.     if(z==0) {bw=win();}
  66.     return(bw);
  67. }
  68.  
  69. win()
  70. {
  71.     int i;
  72.     for(i=0;i<3;i++){
  73.         if(f[i][0]==1&&f[i][1]==1&&f[i][2]==1) return(1);
  74.         if(f[i][0]==-1&&f[i][1]==-1&&f[i][2]==-1) return(-1);
  75.         if(f[0][i]==1&&f[1][i]==1&&f[2][i]==1) return(1);
  76.         if(f[0][i]==-1&&f[1][i]==-1&&f[2][i]==-1) return(-1);
  77.     }
  78.     if(f[0][0]==1&&f[1][1]==1&&f[2][2]==1) return(1);
  79.     if(f[0][0]==-1&&f[1][1]==-1&&f[2][2]==-1) return(-1);
  80.     if(f[0][2]==1&&f[1][1]==1&&f[2][0]==1) return(1);
  81.     if(f[0][2]==-1&&f[1][1]==-1&&f[2][0]==-1) return(-1);
  82.     return(0);
  83. }
  84. printfield()
  85. {
  86.     int i,j;
  87.     for(i=0;i<3;++i){
  88.         printf("%1d",i+1);
  89.         for(j=0;j<3;j++){
  90.             if(f[i][j]==1) printf("|X"); else{
  91.             if(f[i][j]==-1) printf("|O"); else printf("| ");}
  92.         }
  93.         printf("|\n -------\n");
  94.     }
  95.     printf("  1 2 3\n");
  96.  
  97. }
  98.  
  99.  
  100.